﻿#pragma once
#include <allegro5\allegro.h>
#include <allegro5\allegro_primitives.h>
#include "CColor.h"
#include "CImage.h"
#include "CTimerTest.h"

namespace DarkStorm2D {
namespace GraphicsCore {
	//! Klasa okna renderingu, reprezentuje to co zobaczymy na ekranie.
	class DLLDARKSTORM2D CScreen : public Singleton<CScreen>
	{
	protected:
		//! czy zainicjowano okno.
		static bool m_IsInit;
		//! Kolor, którym będzie czyszczony tylny bufor.
		static CColor m_ClearColor;

		//! Zegar sprzętowy
		SystemCore::CTimerTest m_Timer;
		//! Ostatnia ilość klatek na sekundę
		static int m_LastFPS;
	public:
		CScreen();
		~CScreen();

		/*! Inicjalizuje okno.
		 * @param Width Szerokość Obrazu.
		 * @param Height Wysokość Obrazu
		 * @param FullScrean Czy ma być wyświetlany na pełnym ekranie.
		 * @param ClearColor kolor do czyszczenia, jeśli NULL to kolor czarny.
		 * @return true - zainicjowany poprawnie.
		 */
		static bool Initialize(int Width, int Height, bool FullScreen, CColor * ClearColor = NULL);

		/*! Zamknięcie okna.
		 *
		 */
		static void Shoutdown();
		/*! Czy okno renderingu jest zainicjowane.
		 * @return true - tak, false nie.
		 */
		static bool IsInit();
		/*! Zmienia kolor czyszczenia.
		 * @param ClearColor Kolor, którym będzie czyszczony bufor tylny. 
		 */
		static void SetClearColor(CColor * ClearColor);

		//static void SetBlenderMode(int src, int dst, CColor * BlendColor);
		//static void SetBlenderMode(CBlenderMode * BlenderMode);
		//static CBlenderMode* GetBlenderMode();

		static void BeginFrame();
		static void Clear();
		static void EndFrame();
		static int GetLastFPS()
		{
			return GetSingletonPtr()->m_LastFPS;
		}
		inline static void DrawLine(float x1, float y1,float x2, float y2, CColor & Color, float thickness)
		{
			al_draw_line(x1,y1,x2,y2,Color.m_Color,thickness);
		}

		inline static void DrawTriangle(float x1, float y1,float x2, float y2,float x3,float y3, CColor & Color, float thickness)
		{
			al_draw_triangle(x1,y1,x2,y2,x3,y3,Color.m_Color,thickness);
		}

	};

};
};